//此文件作为Generator的核心入口
//需要导出一个继承自Yeoman Generator的类型
//Yeoman Generator在工作时会自动调用我们在此类型中定义的一些生命周期方法
//我们在这些方法中可以通过调用父类提供的一些工具方法实现一些功能，比如文件写入
const Generator = require('yeoman-generator')
module.exports = class extends Generator {
  //yeoman在询问用户环节会调用的此方法
  //在此方法中可以调用父类的prompt()方法发出对用户的命令行进行询问
  prompting() {
    return this.prompt([{
      type: 'input', //输入形式
      name: 'name',
      message: 'Your project name', //展示给用户的
      default: this.appname //appname为项目的生成目录名称
    }]).then(answers => {
      //answers => { name: 'user input value' }
      this.answers = answers
    })
  }
  writing() {
    //yeoman自动在生成文件阶段调用此方法
    //我们这里尝试往项目目录中录入问价
    // this.fs.write(
    //   this.destinationPath('temp.txt'),
    //   Math.random().toString()
    // )
    //通过模版方式写入文件到目标目录
    //模版文件路径
    const tmpl = this.templatePath('bar.html')
    //输出目标路径
    const output = this.destinationPath('bar.html')
    //模版数据上下文
    const context = this.answers
    this.fs.copyTpl(tmpl, output, context)
  }
}